/**
 * 版本记录：
 * v1.1.0:修复打印数据时，超宽裁切导致的黑块bug，主要是钉钉固资项目
 * v1.1.3:适配A8/A20/A63等机型
 * v1.1.4:  a、新增字体加粗,绘制文本接口新增字段
 *          b、新增条码绘制条码文本内容，条码绘制接口新增字段，条码宽度需要为文本长度*2较为合适
 */
/**
 * 混淆工具，使用node安装 sudo npm install javascript-obfuscator -g
 * javascript-obfuscator -v 查看版本
 * javascript-obfuscator jcapi.js
 */

import JCSDKManager from "./JCAPIManager"

let manager = JCSDKManager();

let JCSDKPrintCallBack = {
  gapType:1,
  darkness:3,
  count:1,
  success:(res) => {},
  fail:(err)=>{},
  complete:()=>{}
}

let JCSDKPrintOptionParas = {
  //B32R支持
  epc:'',
  //H1S支持
  hasDash:false
}

const JCAPI = {
  
}

JCAPI.openPrinter=function(printerName,didConnectedHandler, didDisconnectedHandler){
  manager.openPrinter(printerName,didConnectedHandler,didDisconnectedHandler);
}

JCAPI.closePrinter=function(){
  manager.closePrinter();
}

/**
 * 搜索蓝牙设备
 * @param {*} didGetScanedPrinters 搜索后的回调 function(list){}
 */
JCAPI.scanedPrinters=function(didGetScanedPrinters){
  manager.scanedPrinters(didGetScanedPrinters);
}

/**
 * 设置打印浓度
 * @param {*} darkness 
 */
JCAPI.setPrintDarkness=function(darkness=3) {
  manager.setPrintDarkness(darkness);
}
/**
 * 设置纸张类型
 * @param {*} gapType 1.间隙纸  2.黑标纸  3.连续纸  4.定孔纸  5.透明纸  6.标牌
 */
JCAPI.setPrintPageGapType=function(gapType=1) {
  manager.setPrintPageGapType(gapType);
}
JCAPI.startJob=function(gapType,darkness,totalCount,callback){
  manager.startJob(gapType,darkness,totalCount,callback);
}
/**
 * 设置打印元素的旋转角度
 * @param {*} orientation 0:不旋转;90:顺时针旋转 90 度;180:旋转
180 度;270:逆时针旋转 90 度
 */
JCAPI.setItemOrientation=function(orientation) {

}
/**
 * 打印前开始绘制
 * @param {*} canvasId 画布ID
 * @param {*} compent 画布所在js对象
 * @param {*} canvasWidth 画布宽
 * @param {*} canvasHeight 画布高
 * @param {*} roration 旋转角度
 */
JCAPI.startDrawLabel=function(canvasId,compent,canvasWidth,canvasHeight,roration=0) {
  manager.startDrawLabel(canvasId,compent,canvasWidth,canvasHeight,roration);
}
/**
 * 绘制文本
 * @param {*} content 文本内容
 * @param {*} x 起点x
 * @param {*} y 起点y
 * @param {*} fontHeight 字体大小
 * @param {*} rotation 旋转角度
 * italic：ios不支持中文斜体
 * @options {*} {bold:false,
 *               italic:false,
 *               family:'SimHei'}
 */
JCAPI.drawText=function(content,x,y,fontHeight,rotation=0,options=null) {
  manager.drawText(content,x,y,fontHeight,rotation,options);
}
/**
 * 绘制条码
 * @param {*} content 条码内容
 * @param {*} x 起点x
 * @param {*} y 起点y
 * @param {*} width 宽
 * @param {*} height 高
 * @param {*} fontSize 文本的字体大小
 * @param {*} fontHeight 文本的高度
 * @param {*} postion 文本位置，0-条码下方 1-条码上方 2-不显示文体，此时fontSize/fontHeight无效
 */
JCAPI.drawBarcode=function(content,x,y,width,height,rotation=0,fontSize,fontHeight,postion=2) {
  manager.drawBarcode(content,x,y,width,height,rotation,fontSize,fontHeight,postion);
}
/**
 * 绘制二维码
 * @param {*} content 内容
 * @param {*} x 起点x
 * @param {*} y 起点y
 * @param {*} width 宽
 * @param {*} height 高
 * @param {*} rotation 旋转角度 0-90-180-270
 * @param {*} ecc 纠错等级 0-3
 */
JCAPI.drawQRCode=function(content,x,y,width,height,rotation=0,ecc=2) {
  manager.drawQRCode(content,x,y,width,height,rotation,ecc);
}
/**
 * 绘制矩形
 * @param {*} x 起点x
 * @param {*} y 起点y
 * @param {*} width 宽
 * @param {*} height 高
 * @param {*} lineWidth 线条宽
 * @param {*} isFilled 是否填充
 */
JCAPI.drawRectangle=function(x,y,width,height,lineWidth,isFilled=false,rotation=0) {
  manager.drawRectangle(x,y,width,height,lineWidth,isFilled,rotation);
}

JCAPI.drawLine=function(x,y,width,height,rotation=0) {
  manager.drawLine(x,y,width,height,rotation);
}
/**
 * 绘制图片
 * @param {*} path 路径
 * @param {*} x 起点x
 * @param {*} y y
 * @param {*} width 宽
 * @param {*} height 高
 */
JCAPI.drawImage=function(path,x,y,width,height,rotation=0) {
  manager.drawImage(path,x,y,width,height,rotation);
}

/**
 * 绘制完成
 * @param {*} callback 绘制完之后的回调
 */
JCAPI.endDrawLabel=function(callback) {
  manager.endDrawLabel(callback);
}

/**
 * 打印数据
 * @param {*} onePageCount 打印当前数据份数
 * @param {*} dataW 打印数据的宽
 * @param {*} dataH 打印数据的高
 * @param {*} dataArray 打印的数据数组，要求无符号整型，数组长度=宽*高*4
 * @param {*} callback 绘制完之后的回调
 * @param {JCSDKPrintOptionParas} optionPara 可选参数
 */
JCAPI.printImageData=function(onePageCount=1,dataW,dataH,dataArray,callback,optionPara=null){
  manager.printImageData(onePageCount,{width:dataW,height:dataH,data:dataArray},callback,optionPara);
}
/**
 * 打印
 * @param onePageCount 单页打印份数
 * @param callback 回调,表示可以发送下一页数据，不表示已打印完成，打印完成监听页码变化状态 
 * @param {JCSDKPrintOptionParas} optionPara 可选参数
 */
JCAPI.print=function(onePageCount=1,callback,optionPara=null){
  manager.startPrint(onePageCount,callback,optionPara);
}
/**
 * 打印
 * @param callback 回调,1.1.0_beta3之前回调参数为int类型，之后为对象{'count':int必需,'tid':string非必需} 
 */
JCAPI.didReadPrintCountInfo=function(callback){
  manager.didReadPrintCountInfo(callback);
}

JCAPI.didReadPrintErrorInfo=function(callback){
  manager.didReadPrintErrorInfo(callback);
}

JCAPI.cancelPrint=function(callback){
  manager.cancelPrint(callback);
}

JCAPI.setDebug=function(debug=0){
  manager.debug = debug;
}
/**
 * 获取已连接设备
 */
JCAPI.getConnName = function () {
  return  manager.getConnName();
 };
 /**
 * 获取SN号
 */
JCAPI.getSN = function(callback) {
  manager.getSN(callback);
};
/**
 * 获取软件版本号
 */
JCAPI.getSoftVersion = function(callback) {
  manager.getSoftVersion(callback);
};
/**
* 获取硬件版本号
*/
JCAPI.getHardVersion = function(callback) {
  manager.getHardVersion(callback);
};
/**
 * 获取倍率
 */
JCAPI.getMultiple = function () {
  return  manager.getMultiple();
 };
 export default JCAPI;